/**
 * 将单位为ms的时间转换为时分秒
 * @param value 传入的时间毫秒数
 * @param point 是否带小数点和ms数，true为带，false为不带
 * @returns {string}
 */
export function formatTimeToHMS(value, point) {
  if (value === 0) return '0s';
  if (value < 1000) return value + 'ms';
  let second = parseInt((value / 1000).toString());
  let millisecond = parseFloat((value % 1000).toString());
  const unitsArr = ['h ', 'm ', 's'];
  const multiplesArr = [3600, 60, 1];
  let result = '';
  for (let i = 0; i < unitsArr.length; i++) {
    let firstDigit = parseInt((second / multiplesArr[i]).toString());
    second = parseInt((second % multiplesArr[i]).toString());
    if (firstDigit > 0) {
      result = result + firstDigit + unitsArr[i];
    }
  }
  if(point === true) {
    if(millisecond >= 100) {millisecond = millisecond.toString()}
    else if(millisecond >= 10) {millisecond = '0' + millisecond}
    else if(millisecond > 0) {millisecond = '00' + millisecond}
    result = `${result.split('s')[0]}.${millisecond}s`
  }
  return result;
}

/**
 * 时间戳与日期之间的转换
 * 时间戳默认为13位
 * symbol参数可选择性传
 * {
 *    传 1 格式为：2020年09月24日 14时16分50秒
 *    传 2 格式为：2020年09月24日 14:16:50
 *    传 3 格式为：2020-09-24 14时16分50秒
 *    默认为：2020-09-24 14:16:50
 * }
 **/
function addZero(param) {
  return param < 10 ? '0' + param : param;
}
export function formatDate(date, symbol) {
  let value = '';
  let time = new Date(date);
  let year = time.getFullYear();
  let month = time.getMonth() + 1;
  let day = time.getDate();
  let hour = time.getHours();
  let minute = time.getMinutes();
  let second = time.getSeconds();
  switch (symbol) {
    case 1:
      value = year + '年' + addZero(month) + '月' + addZero(day) + '日 ' + addZero(hour) + '时' + addZero(minute) + '分' + addZero(second) + '秒';
      break;
    case 2:
      value = year + '年' + addZero(month) + '月' + addZero(day) + '日 ' + addZero(hour) + ':' + addZero(minute) + ':' + addZero(second);
      break;
    case 3:
      value = year + '-' + addZero(month) + '-' + addZero(day) + ' ' + addZero(hour) + '时' + addZero(minute) + '分' + addZero(second) + '秒';
      break;
    default:
      value = year + '-' + addZero(month) + '-' + addZero(day) + ' ' + addZero(hour) + ':' + addZero(minute) + ':' + addZero(second);
      break;
  }
  return value;
}

/**
 * 数组内根据参数排序的辅助方法
 * @param property 属性名
 * @param isPositive 是否为正序排序
 */
export function sorting(property, isPositive) {
  return function(a, b) {
    const value1 = a[property];
    const value2 = b[property];
    if (isPositive === undefined || isPositive) {
      return value2 - value1;
    }else if (!isPositive) {
      return value1 - value2;
    }
  }
}

/**
 * 获取最近指定数目的日期数组
 * @param days 最近几天,默认为7天
 * @param isFront before: 当前日期前, after: 当前日期后, 默认为true
 * @param notToday: 是否前一天
 */
export function getRecentDays(days, isFront, notToday) {
  let numberOfDays = days || 7;
  let Front = isFront || 'before';
  let isNotToday = notToday || false;
  // 定义一个空的日期数组
  let currentDays = [];
  // 获取当前时间
  const now = new Date();
  // 获取当前时间戳
  let nowTime = now.getTime();
  // 24小时的时间戳
  const oneDay = 24 * 60 * 60 * 1000;
  if (Front !== 'before' && Front !== 'after') {
    throw onerror('传参有误,isFront参数请传before或after');
  }else {
    // 设置days天前的时间戳
    if (Front === 'before') {
      nowTime = nowTime - (numberOfDays - 1) * oneDay;
    }
    //判断是否不包含当天日期
    if (isNotToday === true) {
      nowTime = nowTime - oneDay;
    }
    for (let i = 0; i < numberOfDays; i++) {
      // 时间戳转为时间
      const time = new Date(nowTime);
      const month = time.getMonth() + 1;
      const day = time.getDate();
      const calcMonth = month < 10 ? '0' + month : month;
      const calcDay = day < 10 ? '0' + day : day;
      const finalDate = calcMonth + '-' + calcDay;
      currentDays.push(finalDate);
      nowTime = nowTime + oneDay;
    }
    return currentDays;
  }
}